繁体   English   中英

Unix:使用grep或awk-需要在特定字段上查找字母的出现,将行打印出来

[英]unix: Using grep or awk - need to find occurrence of a letter on specific field print the line

我有几个固定文件,需要快速扫描它们以查看在字段159上是否出现字母L并进行打印。 例:

123456ABCDEF23253657LA00000000MMMKSNS
123456ABCDEF23253657BA00000000MMMKSNS
123456ABCDEF23253657LA00000000MMMKSNS
123456ABCDEF23253657LA00000000MMMKSNS
12345        3253657LA00000000MMMKSNS

我尝试了grep -E '^.{21} L'但是找不到180固定长度的grep -E '^.{159} L'

使用awk,您可以打印子字符串。 有关语法,请参见nim的答案。

while read line; \
  do echo "$line" | awk '{print substr($0,21,1)}'| \
  grep -q "L"; [ $? -eq 0 ] && \
  echo "$line"; \
  done < "${file}"

输出:

123456ABCDEF23253657LA00000000MMMKSNS
123456ABCDEF23253657LA00000000MMMKSNS
123456ABCDEF23253657LA00000000MMMKSNS
12345        3253657LA00000000MMMKSNS

你很亲近

echo "123456ABCDEF23253657LA00000000MMMKSNS
123456ABCDEF23253657BA00000000MMMKSNS
123456ABCDEF23253657LA00000000MMMKSNS
123456ABCDEF23253657LA00000000MMMKSNS
12345        3253657LA00000000MMMKSNS" | grep -E '^.{20}L'

输出

123456ABCDEF23253657LA00000000MMMKSNS
123456ABCDEF23253657LA00000000MMMKSNS
123456ABCDEF23253657LA00000000MMMKSNS
12345        3253657LA00000000MMMKSNS

请注意,在{20} L之间留一个空格将抛出该位置,并且当L位于位置21时,将跳过20字符。

高温超导

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM