如果第二个字段的字符数超过7个,使用awk或perl一行命令打印该行。

4

我有一个包含1000行的文件,每行都由两个单词组成,用空格分隔。如果最后一个单词长度大于7个字符,我该如何仅打印每一行?可以使用awk RLENGTH吗?在Perl中是否有更简单的方法?

5个回答

10

@OP,awk 的 RLENGTH 在调用 match() 函数时使用。相反,使用 length() 函数来检查字符的长度。

awk 'length($2)>7' file

如果你在使用bash,可以使用shell命令解决:

while read -r a b
do
  if [ "${#b}" -gt 7 ];then
    echo $a $b
  fi
done <"file"

2
+1 awk 真棒。请注意,它会自动打印所有匹配的行,因此您不必烦恼任何 printf 调用! - Martin Wickman

9
perl -ane 'print if length($F[1]) > 7'

3
您可以做到以下几点:
perl -ne '@a=split/\s+/; print if length($a[1]) > 7' input_file.txt

使用的选项:

    -n  假设程序周围有 'while () { ... }' 循环
    -e  'command'    程序的一行代码 (可以使用多个 -e,省略 programfile)

您可以像 Chris 一样使用自动分割选项

    -a  在 -n 或 -p 模式下启用自动分割模式(将 $_ 分割为 @F)

2
perl -ane 'length $F[1] > 7 && print' <input_file>

0
perl -lane 'print if (length($F[$#F]) > 7)' fileName

或者

perl -pae '$_ = "" if (length($F[$#F]) <= 7)' fileName

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接