如何在 Linux 中使用 awk 或 grep 或 sed 命令将文件的一部分提取到单独的文件中

Nar*_* DJ 4 grep awk

我有如下所示的文本文件:

输入文件1.txt

.......................
cha21   1       3       5       nar
cha21   2       3       6       piy
cha23   2       3       5       ram
cha23   3       3       3       dam
cha27   5       3       7       pam
................................
Run Code Online (Sandbox Code Playgroud)

我想将与“cha21”、“cha23”和“cha27”行对应的所有 5 列提取到 3 个不同的输出文件中(例如,cha21.txt、cha23.txt、cha27.txt)。

输出文件

cha21.txt

..........
cha21   1       3       5       nar
cha21   2       3       6       piy
......................
Run Code Online (Sandbox Code Playgroud)

cha23.txt

cha23   2       3       5       ram
cha23   3       3       3       dam
...................................
Run Code Online (Sandbox Code Playgroud)

cha27.txt

cha27   5       3       7       pam
...........................
Run Code Online (Sandbox Code Playgroud)

我可以对 3 个文件使用 grep 命令 3 次执行此操作...无论如何我可以一次完成所有操作,即一个命令,因为我需要提取 100 个输出文件。

jim*_*mij 6

很容易awk

awk '{print $0 >> $1".txt"}' file1.txt
Run Code Online (Sandbox Code Playgroud)

  • 为什么“打印 $0”而不仅仅是“打印”?是否有需要显式 `$0` 的 awk 版本? (4认同)

Arc*_*mar 6

我会尝试

awk '{print >> $1 ".txt" ;}' 
Run Code Online (Sandbox Code Playgroud)

在哪里

  • print 打印整行。
  • >> $1 ."txt"将此行写入(附加)到 $1 指示的文件中,并.txt添加。

编辑:

如果您有注释行、带点的行等

尝试

awk '$1 ~ /cha/ {print >> $1 ".txt" ;}' 
Run Code Online (Sandbox Code Playgroud)

这只会填充以“cha”开头的文件。