将csv文件的第一列解析为新文件

S1s*_*hus 32 csv bash awk cut sed

操作系统:OSX方法:从命令行开始,所以使用sed,cut,gawk,虽然最好没有安装模块.

本质上我试图获取csv文件的第一列并将其解析为一个新文件.

示例输入文件

EXAMPLEfoo,60,6
EXAMPLEbar,30,6
EXAMPLE1,60,3
EXAMPLE2,120,6
EXAMPLE3,60,6
EXAMPLE4,30,6
Run Code Online (Sandbox Code Playgroud)

欲望输出

EXAMPLEfoo 
EXAMPLEbar
EXAMPLE1
EXAMPLE2
EXAMPLE3
EXAMPLE4
Run Code Online (Sandbox Code Playgroud)

所以我想要第一列.

这是我到目前为止所尝试的:

awk -F"," '{print $1}' in.csv > out.txt

awk -F"," '{for (i=2;i<=NF;i++)}' in.csv > out.txt

awk -F"," 'BEGIN { OFS="," }' '{print $1}' in.csv > out.txt

cat in.csv | cut -d \, -f 1 > out.txt
Run Code Online (Sandbox Code Playgroud)

似乎没有工作,他们只是打印第一行或根本没有,所以我认为它没有逐行阅读.

Tho*_*mas 39

你的最后一个选项适合我:

$ cat > in.csv  # Then pasted the example input followed by Ctrl+D:
EXAMPLEfoo,60,6
EXAMPLEbar,30,6
EXAMPLE1,60,3
EXAMPLE2,120,6
EXAMPLE3,60,6
EXAMPLE4,30,6
[Ctrl+D]
$ cat in.csv | cut -d, -f1
EXAMPLEfoo
EXAMPLEbar
EXAMPLE1
EXAMPLE2
EXAMPLE3
EXAMPLE4
Run Code Online (Sandbox Code Playgroud)

也许行结尾在这里咬你?如果文件具有DOS样式或甚至旧Mac风格的行结尾,则可能会导致奇怪的行为.尝试运行file in.csv,看看它出现了什么.

$ file in.unix.csv
in.unix.csv: ASCII text
$ file in.dos.csv
in.dos.csv: ASCII text, with CRLF line terminators
Run Code Online (Sandbox Code Playgroud)

如果后者是您的情况,请使用该dos2unix工具转换文件.

编辑:在OS X上,它似乎flip是你想要的.

  • 您对行结尾的了解很准确,现在就修复了。 (2认同)

Per*_*man 12

我复制粘贴您的示例输入,将其保存为in.csv,然后运行您的第一行,

awk -F"," '{print $1}' in.csv > out.txt
Run Code Online (Sandbox Code Playgroud)

它完美地工作,如下:

$ emacs in.csv
$ cat in.csv 
EXAMPLEfoo,60,6
EXAMPLEbar,30,6
EXAMPLE1,60,3
EXAMPLE2,120,6
EXAMPLE3,60,6
EXAMPLE4,30,6
$ awk -F"," '{print $1}' in.csv > out.txt
$ cat out.txt 
EXAMPLEfoo
EXAMPLEbar
EXAMPLE1
EXAMPLE2
EXAMPLE3
Run Code Online (Sandbox Code Playgroud)

这是在OS X 10.5上的Terminal.app中


Mic*_*hař 7

对我来说, cut 产生预期的结果:

cut -d, -f1 < in.csv > out.txt
Run Code Online (Sandbox Code Playgroud)