我的 shell 脚本中有以下 for 循环:
#!bin/ksh
touch output.dat
IFS=">>>"
i=0
for stm in `grep "cpdctl dsjob run-pipeline --project " input_file`
do
echo "the current stmt is : $stm"
done
在我的输入文件中输入文件我有两条与模式匹配的记录。所以我期望输出是这样的
----Expected output
the current stmt is : "first line matching pattern"
the current stmt is : "second line matching pattern"
---Actual output
the current stmt is : "first line matching pattern"
"second line matching pattern"
the current stmt is :
我的实际输出中缺少
你能让我知道我错过了什么吗?我也尝试过 AWK,但输出相同。我做了一些搜索,但找不到任何类似的问题。
[编辑]刚才我想到可能是因为IFS=“>>>”行我可能遇到这个问题。所以,包括我的完整代码。我添加了IFS=“>>>”因为我的记录包含空格字符,因此 for 循环在单独的行中返回它们。
答案1
使用awk
:
awk '/cpdctl dsjob run-pipeline --project / {print "the current stmt is :", $0}' input
这将打印包含以下内容的每一行cpdctl dsjob run-pipeline --project
答案2
抱歉给大家添麻烦了。下面的帖子帮助解决了这个问题。我最初将“\n”指定为 IFS,但它不起作用[下面的链接解释了原因]。感谢您提供的所有宝贵意见。 [https://stackoverflow.com/questions/16831429/when-setting-ifs-to-split-on-newlines-why-is-it-necessary-to-include-a-backspac][1]