从文本文件转换数字
Convert number from text file
我有一个文件:
id name date
1 paul 23.07
2 john 43.54
3 marie 23.4
4 alan 32.54
5 patrick 32.1
我想打印以 "p" 开头且 ID 为奇数的名称
我的命令:
grep "^p" filename | cut -d ' ' -f 2 | ....
结果:
paul
patrick
来点 awk 怎么样?
awk '{if ( % 2 == 1 && substr(, 1, 1) == "p") print }' filename
在 awk 中,字段默认按 spaces, tabs and newlines 拆分,因此您的 id 可用 $1,name 可用 $2 等。if 是不言自明的,当条件为真时,name 是打印出来,否则什么都不做。 AWK 及其语法远比人们通常想象的要友好。
只要记住基本模式即可:
BEGIN {
# ran once in the beginning
}
{
# done for each line
}
END {
# ran once in the end
}
如果你需要更复杂的解析,你可以在一个单独的文件中保持脚本的清晰和可读性,并像这样调用它:
awk -f script.awk filename
Awk 无所不能:
$ awk 'NR > 1 && ~ /^p/ && ( % 2) == 1 { print }' op.txt
paul
patrick
编辑
要使用 :
作为字段分隔符:
$ awk -F: 'NR > 1 && ~ /^p/ && ( % 2) == 1 { print }' op.txt
NR > 1
跳过 header
$2 ~ /^p/
名称字段以 p
开头
$1 % 2 == 1
ID字段为奇数
如果以上都成立:
{ 打印 $2 }
打印名称字段
你可以试试这个
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 space。
我有一个文件:
id name date 1 paul 23.07 2 john 43.54 3 marie 23.4 4 alan 32.54 5 patrick 32.1
我想打印以 "p" 开头且 ID 为奇数的名称
我的命令:
grep "^p" filename | cut -d ' ' -f 2 | ....
结果:
paul patrick
来点 awk 怎么样?
awk '{if ( % 2 == 1 && substr(, 1, 1) == "p") print }' filename
在 awk 中,字段默认按 spaces, tabs and newlines 拆分,因此您的 id 可用 $1,name 可用 $2 等。if 是不言自明的,当条件为真时,name 是打印出来,否则什么都不做。 AWK 及其语法远比人们通常想象的要友好。
只要记住基本模式即可:
BEGIN {
# ran once in the beginning
}
{
# done for each line
}
END {
# ran once in the end
}
如果你需要更复杂的解析,你可以在一个单独的文件中保持脚本的清晰和可读性,并像这样调用它:
awk -f script.awk filename
Awk 无所不能:
$ awk 'NR > 1 && ~ /^p/ && ( % 2) == 1 { print }' op.txt
paul
patrick
编辑
要使用 :
作为字段分隔符:
$ awk -F: 'NR > 1 && ~ /^p/ && ( % 2) == 1 { print }' op.txt
NR > 1
跳过 header
$2 ~ /^p/
名称字段以 p
$1 % 2 == 1
ID字段为奇数
如果以上都成立:
{ 打印 $2 }
打印名称字段
你可以试试这个
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 space。