我有一个看起来像这样的 txt 文件 (input.txt):
A_Karitiana-4.DG Ignore_Karitiana(discovery).DG
A_French-4.DG Ignore_French(discovery).DG
A_Dinka-4.DG Dinka.DG
A_Dai-5.DG Dai.DG
S_Dai-2.DG Dai.DG
B_Dai-4.DG Dai.DG
S_Dai-3.DG Dai.DG
S_Dai-1.DG Dai.DG
Run Code Online (Sandbox Code Playgroud)
我需要创建一个仅包含 input.txt 第一列的新 txt 文件 (output.txt)。所以 output.txt 必须是这样的:
A_Karitiana-4.DG
A_French-4.DG
A_Dinka-4.DG
A_Dai-5.DG
S_Dai-2.DG
B_Dai-4.DG
S_Dai-3.DG
S_Dai-1.DG
Run Code Online (Sandbox Code Playgroud)
我试过这个命令:
awk '$1' input.txt > output.txt
Run Code Online (Sandbox Code Playgroud)
还有这个:
awk -F' ' '$1' input.txt > output.txt
Run Code Online (Sandbox Code Playgroud)
但它们都创建了一个 output.txt 文件,看起来与 input.txt 完全相同。
我想这是一个分隔符的问题,但我不知道如何解决这个问题。
你不是在打印。尝试
awk '{print $1}' input.txt > output.txt
Run Code Online (Sandbox Code Playgroud)
当你只是给出一个表达式(你尝试的方式)时,它的awk
工作方式有点像 default grep
:完全打印任何匹配的行:
awk '/regexp/' file.txt
- 打印匹配正则表达式的行awk 'NR==3' file.txt
- 打印第 3 行awk '1' file.txt
- 打印所有 1 为真的行,即所有(好吧,一种笨拙的 cat 方式,但我们正在接近你所做的)awk '$1' file.txt
- 打印所有$1
评估为真的行,即非空(并且不会评估为假,例如“0”),即给定您的文件,打印所有行(因为$1
这里将始终包含非数字,非空字符串)awk 脚本由pattern {action}
成对组成。
pattern
为空,{action}
则将应用于所有记录{action}
为空,则默认操作{print}
将应用于所有匹配的记录pattern
awk '$1'
{print}
当模式$1
评估为真时将应用默认操作。由于非空字符串为真,它将打印所有非空记录,除了那些在您的语言环境中第一个字段在数字上计算为零的记录。
相反,您希望将非默认操作{print $1}
应用于默认的空模式:
awk '{print $1}' input.txt > output.txt
Run Code Online (Sandbox Code Playgroud)