在一行中使用多个 awk 命令

在一行中使用多个 awk 命令

这是我想要做的:我的数据位于同一文件中的行集中(变量 vaa vbb 正在循环遍历它并且能够根据需要控制它)
我需要的是在写入数据之前添加一个额外的列文件基本上是一个迭代每组数据的计数器。

例如:数据行5-8的Set1、数据行14-29的Set2等

Required output:

1,row5 data
1,row6 data
1,row7 data
1,row8 data
2,row14 data
2,row15 data
.
.
.
2,row29 data
.
.
.

====== Code below ======

awk -v vaa=$varAA -v vbb=$varBB -v vcc=$varC 'NR>=vaa&&NR<=vbb' $I >> part_${I%.*}.csv

我正在将文件写入 csv 文件。我能够处理行和计数器变量集。但无法编写可以使用变量 $varC (具有递增计数器)添加额外列馈送数据的代码段

我浏览了几个论坛,用法/示例要么只是用于打印,要么只是在现有数据集中添加一列。

我是 bash 编码新手,所以无法理解如何实现这一点。感谢所有帮助。

谢谢。

编辑:output_A.csv 包含数据output_A.txt 包含有关哪个区域到哪个区域是数据集的信息。 (需要一些特定于任务的算术,我已经处理了)例如txt文件数据:100 200 xyz 这是完整的代码供参考:

for I in 'output_A.csv';
do

varC=0
while read line
do

varC=$(( varC + 1 ))

varA=${line%%,*}
varB=$(echo "$line" | cut -d',' -f2- | rev | cut -d',' -f2- | rev)

varAA=$(echo "$varA * 100" | bc -l)
varBB=$(echo "$varB * 100" | bc -l)

#echo -e $varA ' \t' $varB ' \t' $line

awk -v vaa=$varAA -v vbb=$varBB -v vcc=$varC 'NR>=vaa&&NR<=vbb' $I >> part_${I%.*}.csv

done < ${I%.*}.txt

done

答案1

据我了解,您需要将 awk 命令更改为:

'NR>=vaa&&NR<=vbb'

'NR>=vaa&&NR<=vbb { print vcc "," $0 }'

答案2

根据格式文件说明

awk -F',' 'FNR==NR{
               for(i=($1*100),i<=($2*100);i++)
                   portion=FNR
               next }
           { print portion[FNR], $0 }
          ' output_A.txt output_A.csv >> output_A.result

相关内容