我有一个输入文件如下.我需要根据2,3和5列将它们分成多个文件.该文件有更多列,但我使用cut命令只获取所需的列.
12,Accounts,India,free,Internal
13,Finance,China,used,Internal
16,Finance,China,free,Internal
12,HR,India,free,External
19,HR,China,used,Internal
33,Finance,Japan,free,Internal
39,Accounts,US,used,External
14,Accounts,Japan,used,External
11,Finance,India,used,External
11,HR,US,used,External
10,HR,India,used,External
Run Code Online (Sandbox Code Playgroud)
输出文件:
Accounts_India_Internal --
12,Accounts,India,free,Internal
Finance_China_Internal --
13,Finance,China,used,Internal
16,Finance,China,free,Internal
HR_India_External --
12,HR,India,free,External
10,HR,India,used,External
HR_China_Internal --
19,HR,China,used,Internal
Run Code Online (Sandbox Code Playgroud)
等等..
请让我知道如何实现这一目标.
截至目前,我正在考虑根据这些列(2,3,5)对文件进行排序,然后在每条记录上运行循环并开始创建文件.如果文件不存在,则创建并添加记录.否则打开旧文件并添加记录.
是否可以使用shell脚本(bash)执行此操作?
是否可以使用shell脚本(bash)执行此操作?
如果您只想根据字段2,3和5拆分文件,可以快速执行以下操作awk:
awk -F, '{print >> $2"_"$3"_"$5}' infile.txt
Run Code Online (Sandbox Code Playgroud)
将每行附加到名称由字段2,3和5组成的文件.
例:
[me@home]$ awk -F, '{print >> $2"_"$3"_"$5}' infile.txt
[me@home]$ cat Accounts_India_Internal
12,Accounts,India,free,Internal
[me@home]$ cat Finance_China_Internal
13,Finance,China,used,Internal
16,Finance,China,free,Internal
Run Code Online (Sandbox Code Playgroud)
如果您确实希望输出排序,则可以先运行该文件sort.
sort -k2,3 -k5,5 -t, infile.txt | awk -F, '{print >> $2"_"$3"_"$5}'
Run Code Online (Sandbox Code Playgroud)
在将字段传递给awk命令之前,它会对字段2,3和5上的行进行排序.
请注意我们将附加到文件,因此如果重复命令而不删除输出文件,则最终会在输出文件中出现重复数据.要解决此问题,并在聊天中提及您的其他要求(使用第一行作为所有新文件的标题),请参阅此解决方案.
| 归档时间: |
|
| 查看次数: |
1681 次 |
| 最近记录: |