解析shell脚本中的文本文件

时间:2014-06-05 22:20:39

标签: bash shell hadoop awk sed

我正在运行hadoop命令并将输出保存到txt文件。我只想将hadoop命令的特定部分放在文本文件中。

#!/bin/sh

hadoop fs -ls /projects/abcd/ | egrep 'delta|snapshot' > /homes/abcd/tools/list_of_feeds.txt

'list_of_feeds.txt'的内容 -

drwxr-x---   - abcd users                  0 2013-02-05 12:16 /projects/abcd/test1_delta
drwxr-x---   - abcd users                  0 2013-02-06 00:21 /projects/abcd/test2_snapshot

我只想要文件的内容 -

test1_delta
test2_snapshot

我如何解析此文件或在shell中执行此操作?

由于

2 个答案:

答案 0 :(得分:2)

awk对于选择字段很有用(也很简单)。

hadoop fs -ls /projects/abcd/ | awk -F '/' '/delta|snapshot/ {print $NF}' > /homes/abcd/tools/list_of_feeds.txt 

然而,我不知道你的for循环是做什么的。

$NF选择最后一个字段,因为对路径名中的组件数进行硬编码会很愚蠢。

显然,与egrep一起使用awk是不必要的。

答案 1 :(得分:-1)

您可以将命令输入awk。使用以下内容:

#!/bin/sh

hadoop fs -ls /projects/abcd/ | egrep 'delta|snapshot' | awk -F '/' '{print $4} > /homes/abcd/tools/list_of_feeds.txt 
cat /homes/abcd/tools/list_of_feeds.txt