假设我有一个文件info.txt。第一列是id,其余是其内容。
1 aaa bbb
1 ccc ddd mmm
4 ccc eee
7 ddd fff jjj kkk
我的数字很简单,行以“1”开头。所以我使用grep来过滤它:
what_I_concern=$(cat info.txt | grep -iw 1 | cut -d ' ' -f 2-)
然后我想迭代这些行:
for i in $what_I_concern; do
pass $i to another program #I want to pass one line at a time
done
但它真正做的是迭代这些行中的每个单词,而不是将每一行作为一个整体。
我该如何解决这个问题?
答案 0 :(得分:2)
您尝试完成所需内容的方式是导致分词。相反,请说:
while read -r line; do
someprogram $(cut -d' ' -f2- <<< "$line")
done < <(grep '^1' info.txt)
<()
语法称为Process Substitution。在这种情况下,它使while
循环能够将grep
命令的输出作为文件读取。
答案 1 :(得分:1)
在这种情况下,您可以完全避免使用grep
和cut
(假设默认为IFS
)
while read -r first rest; do
[ "$first" = "1" ] && pass "$rest" to another program;
done < info.txt