我想知道是否有人可以帮助我将shell命令简化为一行或两行,我们可以使用awk或sed来简化执行,在执行过程中更好的性能是非常有用的
输入文件
PATTERN1 xxx
PATTERN2 xxx
PATTERN3 xxx
PATTERN1 yyy
PATTERN2 yyy
PATTERN3 yyy
PATTERN1 zzz
PATTERN2 zzz
PATTERN3 zzz
我的剧本:
echo "First occurance..."
grep -m1 "PATTERN1" $fileName
grep -m1 "PATTERN2" $fileName
grep -m1 "PATTERN3" $fileName
echo "Last occurance..."
tac $fileName | grep -m1 "PATTERN1"
tac $fileName | grep -m1 "PATTERN2"
tac $fileName | grep -m1 "PATTERN3"
输出
PATTERN1 xxx
PATTERN2 xxx
PATTERN3 xxx
PATTERN1 zzz
PATTERN2 zzz
PATTERN3 zzz
提前致谢
答案 0 :(得分:0)
Just two commands:
$ awk '/PATTERN[1-3]/ && !seen[$1]++' file
PATTERN1 xxx
PATTERN2 xxx
PATTERN3 xxx
$ tac file | awk '/PATTERN[1-3]/ && !seen[$1]++'
PATTERN3 zzz
PATTERN2 zzz
PATTERN1 zzz
This prints a match the first time it is seen.
答案 1 :(得分:0)
如果您想继续使用grep
,可以使用xargs
。
让我们把模式放在一个变量
中patterns=`echo "PATTERN"{1..3} | tr ' ' '\n'`
# or
patterns="PATTERN1\nPATTERN1\nPATTERN3"
现在我们可以这样做:
echo -e "$patterns" | xargs -l sh -c 'cat '$inputFile' | grep -m1 "$0"'
echo -e "$patterns" | xargs -l sh -c 'tac '$inputFile' | grep -m1 "$0"'