从文本文件转换数字

时间:2016-03-09 14:59:23

标签: linux bash awk grep cut

我有一个文件:

 id name date
 1  paul 23.07
 2  john 43.54
 3  marie 23.4
 4  alan  32.54
 5  patrick 32.1

我想打印以“p”开头并且编号为奇数的名称

我的命令: grep "^p" filename | cut -d ' ' -f 2 | ....

结果:

paul
patrick

3 个答案:

答案 0 :(得分:1)

Awk可以做到这一切:

$ awk 'NR > 1 && $2 ~ /^p/ && ($1 % 2) == 1 { print $2 }' op.txt
paul
patrick

修改
要使用:作为字段分隔符:

$ awk -F: 'NR > 1 && $2 ~ /^p/ && ($1 % 2) == 1 { print $2 }' op.txt

NR> 1
略过标题

$ 2〜/ ^ p /
名称字段以p

开头

$ 1%2 == 1
ID字段为奇数

如果以上所有都是真的:
{print $ 2}
打印名称字段

答案 1 :(得分:0)

一个小笨蛋怎么样?

awk '{if ($1 % 2 == 1 && substr($2, 1, 1) == "p") print $2}' filename

在awk中,默认情况下字段被spaces, tabs and newlines拆分,因此您的ID可用作$ 1,名称为$ 2等等。如果条件为真,则if显示为不言自明,名称将打印出来,否则什么都没做。 AWK及其语法比人们通常认为的要友好得多。

记住基本模式:

BEGIN {
    # ran once in the beginning
}
{
    # done for each line
}
END {
    # ran once in the end
}

如果您需要更复杂的解析,您可以在单独的文件中保持脚本的清晰和可读性,并将其称为:

awk -f script.awk filename

答案 2 :(得分:0)

你可以试试这个

grep -e "[0-9]*[13579]\s\+p[a-z]\+" -o text | tr -s ' ' | cut -d ' ' -f 2

奇数可以通过正则表达式轻松表示,我们在这里写

[0-9]*[13579]

如果您尝试使用示例文件名text

运行此命令

文件:文字

 id name date
 1  paul 23.07
 2  john 43.54
 3  marie 23.4
 5  patrick 32.1
38  peter 21.44
10019  peyton 12.02

你会得到输出:

paul
patrick
peyton

请注意,tr -s ' '用于确保分隔符始终为1个空格。