date;
tocompdate=$(date --date="-90 days ago" +%d%m%Y)
echo $tocompdate;
awk -v pattern="$testdate" '{print "Some matter "nr[NR--]" matter "$testdate""};' tocompare.txt >> mail2sent.txt`
我在这里收集当前日期并为其添加90天并将其存储在tocompdate
中。并且将tocompdate
与文件进行比较,其中一行中存在相同的日期,而在该行之前的其他行中存在其他一些事项。
当匹配搜索模式时,我需要打印一些文本,并且#34;匹配行之前的行"在几句话后打印并再次匹配。
例如:
文件低于内容
a1
28112019
b2
04032018
c3
04032018
d4
27072015
e5
27072015
f6
06012030
如果我要与27072015
进行比较,我希望输出如下
The d4 is on 27072015
The e5 is on 27072015
答案 0 :(得分:3)
$ awk -v tgt="27072015" '$0==tgt{printf "The %s is on %s\n", p, $0} {p=$0}' file
The d4 is on 27072015
The e5 is on 27072015
答案 1 :(得分:0)
我建议只使用shell编程的解决方案:
#!/bin/sh
match="27072015"
while IFS= read -r i
do if [ "$i" = "$match" ]
then printf "The %s is on %s\n" "$last" "$match"
fi
# test that we are not in a whitespace
if [ -n "$i" ]
then last="$i"
fi
done < tocompare.txt
注意:此解决方案仅适用于没有特殊字符的非常小且简单的数据集。此外,它比使用awk
慢得多。
答案 2 :(得分:0)
只是为了好玩:使用sed
,grep
和xargs
的其他解决方案
xargs -n 2 <file | grep -E '\b27072015$' | sed -r 's/^(\S+)\s(\S+)$/The \1 is on \2/g'
你明白了,
The d4 is on 27072015 The e5 is on 27072015