Ger*_*alt 7 awk text-processing
我有一个.txt
可以这样举例:
NAME | CODE
name1 | 001
name2 | 001
name3 | 002
name4 | 003
name5 | 003
name6 | 003
Run Code Online (Sandbox Code Playgroud)
我需要编写一个脚本来根据CODE
列拆分这个文件,所以在这种情况下我会得到这个:
file 1:
NAME | CODE
name1 | 001
name2 | 001
file 2:
NAME | CODE
name3 | 002
file 3:
NAME | CODE
name4 | 003
name5 | 003
name6 | 003
Run Code Online (Sandbox Code Playgroud)
根据一些研究,使用 awk 会起作用:
$ awk -F, '{print > $2".txt"}' inputfile
Run Code Online (Sandbox Code Playgroud)
问题是,我还需要将标题包含在第一行中,并且我需要不同的文件名。相反的001.txt
,例如,我需要类似的文件名FILE_$FILENAME_IDK.txt
。
你可以这样尝试:
awk 'NR==1{h=$0; next}
!seen[$3]++{f="FILE_"FILENAME"_"$3".txt";print h > f}
{print >> f}' infile
Run Code Online (Sandbox Code Playgroud)
上面将标题保存在一个变量h
( NR==1{h=$0; next}
) 中,然后,如果$3
没有看到(!seen[$3]++
即,如果它是第一次遇到 的当前值$3
),它会设置文件名(f=...)
并将标题写入文件名( print h > f
)。然后将整行附加到文件名( print >> f
)。它使用默认值FS
(字段分隔符):空白。如果你想使用|
as FS
(甚至是正则表达式gnu awk
),请参阅下面的cas评论。
归档时间: |
|
查看次数: |
1614 次 |
最近记录: |