我有包含以下格式的文件,由另一个系统生成
12;453453;TBS;OPPS;
12;453454;TGS;OPPS;
12;453455;TGS;OPPS;
12;453456;TGS;OPPS;
20;787899;THS;CLST;
33;786789;
我必须检查最后一行是否包含 33 ,然后必须继续将文件复制到其他位置。否则丢弃该文件。
目前我正在做如下
tail -1 abc.txt >> c.txt
awk '{print substr($0,0,2)}' c.txt
然后如果 o/p 被保存到另一个变量并复制。 任何人都可以建议任何其他简单的方法。
谢谢!
R/
最佳答案
假设您有以下输入文件:
$ cat file
a
b
c
d
e
agc
然后您可以运行以下命令(grep
、awk
、sed
、cut
)来获取最后一行的前 2 个字符:
AWK
$ awk 'END{print substr($0,0,2)}' file
ag
SED
$ sed -n '$s/^\(..\).*/\1/p' file
ag
GREP
$ tail -1 file | grep -oE '^..'
ag
剪切
$ tail -1 file | cut -c '1-2'
ag
BASH 子字符串
line=$(tail -1 file); echo ${line:0:2}
所有这些命令都可以满足您的需求,awk
命令只会在文件的最后一行执行操作,因此您不再需要 tail
,该命令将提取文件的最后一行并将其存储在其模式缓冲区中,然后将不是前 2 个字符的所有内容替换为空,然后打印模式缓冲区(最后一行的第 2 个字符),另一个解决方案只是 tail
文件的最后一行并使用 grep
提取前 2 个字符,通过管道传递这 2 个命令,您也可以在不使用的情况下一步完成中间变量、文件。
现在如果你想把所有东西都放在一个脚本中,这就变成了:
$ more file check_2chars.sh
::::::::::::::
file
::::::::::::::
a
b
c
d
e
33abc
::::::::::::::
check_2chars.sh
::::::::::::::
#!/bin/bash
s1=$(tail -1 file | cut -c 1-2) #you can use other commands from this post
s2=33
if [ "$s1" == "$s2" ]
then
echo "match" #implement the copy/discard logic
fi
执行:
$ ./check_2chars.sh
match
我会让你实现复制/丢弃逻辑
证明:
关于linux - 如何在 Linux 中获取文件的最后一行前 2 个字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49228708/