我需要创建一个 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
以下是我需要对此文件执行的一些操作:
- 完全删除第一行
- 对于其余行,我只需要保留第二个和第三个分号之间的数字。
- 我需要在上面第 2 步保留的所有数字之间添加逗号,并将其输出到单行,最后一个数字末尾没有逗号(我想将其用作过滤器
WHERE IDS IN (<Result>)
中另一个 sql 的输入)。
另请注意,我想将输出写入另一个文本文件(创建新文件,或者我可以在与输入文件相同的位置创建一个空文件)或修改相同的输入文件。
我还必须让输出文件仅包含一个数字,后跟逗号。像这样的东西:
列出项目
8417920,
8170811,
--
8285052
最佳答案
这可以在 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
打印存储的字符串。
更新
I also have to have the output file to contain only one number followed by comma.
$ awk -v OFS="," 'NR>1 {if (f) print f OFS; f=$5} END {print f}' file
8417920,
8170811,
7709260,
...
7907220,
20311746,
6466985,
8285052
存储上一行并将其与逗号一起打印。最后,打印最后一个但不带逗号。
关于bash - 从文件中提取特定列到逗号分隔的字符串中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29141547/