grep和awk,结合命令?

时间:2019-06-17 17:49:38

标签: unix awk grep

我的文件如下:

This is a RESTRICTED site.
All connections are monitored and recorded.
Disconnect IMMEDIATELY if you are not an authorized user!
sftp> cd outbox
sftp> ls -ltr
-rw-------   1 0        0            1911 Jun 12 20:40 61N0584832_EDIP000749728818_MFC_20190612203409.txt
-rw-------   1 0        0            1878 Jun 13 06:01 613577165_EDIP000750181517_MFC_20190613055207.txt

我只想用一个命令打印.txt文件名。

我可以做到:

grep -e '^-' outfile.log > outfile.log2

..仅给出以“-”开头的行。

-rw-------   1 0        0            1911 Jun 12 20:40 61N0584832_EDIP000749728818_MFC_20190612203409.txt
-rw-------   1 0        0            1878 Jun 13 06:01 613577165_EDIP000750181517_MFC_20190613055207.txt

然后:

awk '{print $9}' outfile.log2 > outfile.log3

..给出所需的输出:

61N0584832_EDIP000749728818_MFC_20190612203409.txt
613577165_EDIP000750181517_MFC_20190613055207.txt

所以问题是,这两个命令可以组合成1个吗?

4 个答案:

答案 0 :(得分:7)

您可以使用一个awk

awk '/^-/{ print $9 }' file > outputfile

awk '/^-/{ print $9 }' file > tmp && mv tmp file

它是这样的:

  • /^-/-查找以-开头的每一行
  • { print $9 }-仅显示匹配行的字段9。

答案 1 :(得分:3)

似乎真的不想要您想要的-。如果只想获取.txt文件作为输出,请过滤文件名:

awk '$9 ~ /\.txt$/{print $9}' input-file

答案 2 :(得分:1)

在启用grepPCRE)标志的情况下使用-P

grep -oP '^-.* \K.*' outfile.log 
61N0584832_EDIP000749728818_MFC_20190612203409.txt
613577165_EDIP000750181517_MFC_20190613055207.txt

'^-.* \K.*':从-到最后一个空格的行被匹配但被忽略(\K左边的任何内容都将被匹配和忽略)和\K的右边部分已匹配将被打印。

答案 3 :(得分:0)

由于他清楚地写了I want to print only the .txt file names,因此我们应该测试txt文件,并且由于文件名始终是最新的列,因此我们仅通过测试最新提交的行来使它更易于移植:

awk '$NF ~ /\.txt$/{print $NF}' outfile.log > outfile.log2
61N0584832_EDIP000749728818_MFC_20190612203409.txt
613577165_EDIP000750181517_MFC_20190613055207.txt