unix:使用grep或awk - 需要在特定字段上找到字母的出现打印该行

时间:2018-02-16 15:11:32

标签: unix

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

123456ABCDEF23253657LA00000000MMMKSNS
123456ABCDEF23253657BA00000000MMMKSNS
123456ABCDEF23253657LA00000000MMMKSNS
123456ABCDEF23253657LA00000000MMMKSNS
12345        3253657LA00000000MMMKSNS

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

2 个答案:

答案 0 :(得分:1)

使用awk可以打印子字符串。有关语法,请参阅nim's答案。

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

答案 1 :(得分:1)

你很亲密,

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

<强>输出

123456ABCDEF23253657LA00000000MMMKSNS
123456ABCDEF23253657LA00000000MMMKSNS
123456ABCDEF23253657LA00000000MMMKSNS
12345        3253657LA00000000MMMKSNS

请注意,{20} L之间的空格会占据该位置,而当您的L位于第21位时,您会跳过20个字符。

IHTH