我正在尝试删除日期函数的新行字符,并让它包含空格。我用这个保存变量:
current_date=$(date "+%m/%d/%y AT %H:%M:%S" )
我需要将日期保留在当前文本行中,除非另有说明,否则不要继续使用换行符。
current_date=$(date "+%m/%d/%y AT %H:%M:%S" )
awk '(++n==2) {print "1\nData \nAccount '$current_date' Terminated; n=0} (/blah/) {n=0} {print}' input file > output file
输入:
Line 1
Line 2
Line 3
输出:
Line 1
Line 2
Data
Account '$current_date'
Terminated
Line 3
期望的输出:
Line 1
Line 2
Data
Account '$current_date' Terminated
Line 3
答案 0 :(得分:2)
不是尝试使用shell语法将shell变量放入awk代码中,而是简单地将shell变量分配给带有-v
选项的awk变量更简单,更安全:
$ awk -v d="$current_date" '{print} (++n==2) {printf "Data \nAccount %s Terminated\n",d; n=0} (/blah/) {n=0}' file
Line 1
Line 2
Data
Account 03/23/15 AT 14:34:10 Terminated
Line 3
current_date
假设我们向current_date
添加了多余的换行符:
current_date=$(date "+%m/%d/%y AT%n %H:%M:%S%n%n" )
我们可以按照以下方式删除它们:
$ awk -v d="$current_date" 'BEGIN{sub(/\n/,"",d)} {print} (++n==2) {printf "Data \nAccount %s Terminated\n",d; n=0} (/blah/) {n=0}' file
Line 1
Line 2
Data
Account 03/23/15 AT 15:41:17 Terminated
Line 3
答案 1 :(得分:0)
我必须在你的awk命令中添加3个双引号:
awk '(++n==2) {print "1\nData \nAccount '"$current_date"' Terminated"; n=0} (/blah/) {n=0} {print}' foo.txt
当您关闭单引号并在$current_date
之前和之后重新打开它时,您需要在变量周围放置双引号,以便将标记围绕空格保持在一起。然后在终止后需要另一个引号来完成字符串。
我应该补充一点,在我做出这些更改之前我遇到了语法错误,所以也许还有其他事情发生......