我需要创建一个SED命令来修改输入文件,其中包含下面解释的一些条件。
我的输入文件如下所示。
列出项目
Rad# ; ID_KEY ; UNIT_ID ; ORGA_ID
1 ; 30000000004 ; 8417920 ; 0001
2 ; 30000000004 ; 8170811 ; 0001
3 ; 30000000004 ; 7709260 ; 0001
4 ; 30000000004 ; 20145598 ; 0001
5 ; 30000000004 ; 1661503 ; 0001
6 ; 30000000004 ; 1445852 ; 0001
7 ; 30000000004 ; 2480684 ; 0001
8 ; 30000000004 ; 8278636 ; 0001
9 ; 30000000004 ; 20102078 ; 0001
10 ; 30000000004 ; 1581292 ; 0001
11 ; 30000000004 ; 20574348 ; 0001
12 ; 30000000004 ; 8057248 ; 0001
----
----
----
98 ; 3000000000 ; 6830310 ; 0007
99 ; 3000000000 ; 7880497 ; 0007
100 ; 3000000000 ; 597529 ; 0007
101 ; 3000000000 ; 702884 ; 0008
----
----
998 ; 3000000000 ; 7907220 ; 0009
999 ; 3000000000 ; 20311746 ; 0007
1000 ; 3000000000 ; 6466985 ; 0007
1001 ; 3000000000 ; 8285052 ; 0007
以下是我需要对此文件执行的一些操作:
WHERE IDS IN (<Result>)
中另一个sql的输入)。另请注意,我想将输出写入另一个文本文件(创建新文件,或者我可以在与输入文件相同的位置创建一个空文件)或修改相同的输入文件。
我还必须让输出文件只包含一个数字后跟逗号。类似的东西:
列出项目
8417920,
8170811,
--
8285052
答案 0 :(得分:1)
这可以在awk
中很好地完成,看起来非常清楚:
$ awk -v OFS="," 'NR>1 {f=(f?f OFS:"")$5} END {print f}' file
8417920,8170811,7709260,20145598,1661503,1445852,2480684,8278636,20102078,1581292,20574348,8057248,6830310,7880497,597529,702884,7907220,20311746,6466985,8285052
-v OFS=","
将输出字段分隔符设置为逗号。NR>1 {}
要从第二行完成的事情。f=(f?f OFS:"")$5
在变量f
中存储所有需要的输出。如果它是第一次附加,只需使用第5个字段;否则,请使用以前存储的内容。END{}
处理整个文件后要做的事情。print f
打印存储的字符串。我还必须让输出文件只包含一个数字 然后是逗号。
$ awk -v OFS="," 'NR>1 {if (f) print f OFS; f=$5} END {print f}' file
8417920,
8170811,
7709260,
...
7907220,
20311746,
6466985,
8285052
存储上一行并将其与逗号一起打印。最后,打印最后一个但没有逗号。
答案 1 :(得分:0)
尝试以下方法:
sed -n '2~1{s/[^;]*;\([^;]*\);.*/\1,/;H;}; $x;$s/\n//g;s/,$//;$w foo.txt'
阐释:
-n
告诉sed不要为每一行打印模式空间s/[^;]*;\([^;]*\);.*/\1,/
获取;
H
追加持有空间$
x
交换持有空间和模式空间s/\n//g
删除所有换行符s/,$//
删除最后一个逗号w foo.txt
将模式空间写入foo.txt