我有一个如下文件。
"ID" "1" "2"
"00000687" 0 1
"00000421" 1 0
我想做如下。
00000687 0 1
00000421 1 0
我想要
- 删除第一行并
- 从任何其他行上的字段中删除双引号。 FWIW,双引号仅出现在第一列中。
我认为cut -c
可行,但无法实现。我应该怎么办?
答案1
tail
+ tr
:
tail -n +2 file | tr -d \"
tail -n+2
打印从第二行到末尾的文件。tr -d \"
删除所有双引号。
答案2
这应该有效:
sed -i '1d;s/"//g' filename
解释:
-i
将就地修改文件1d
将删除第一行s/"//g
将删除"
文件中的所有内容
您可以先尝试不使用-i
,输出将打印到标准输出。
答案3
解决标题中提出的问题,即仅从第一个空格分隔列中删除双引号:
awk -F ' ' '{ gsub("\"", "", $1) }; NR > 1' file
这使用该gsub()
命令删除每行第一个字段中的所有双引号。最后NR > 1
的 保证不打印第一行。
要从第一个字段中删除双引号,但前提是它们显示为该字段的第一个和最后一个字符:
awk -F ' ' '$1 ~ /^".*"$/ { $1 = substr($1, 2, length($1) - 2) }; NR > 1' file
这使用正则表达式^".*"$
来检测第一个字段的开头和结尾是否有双引号,如果有,则substr()
触发提取字符串内部部分的块。该字段中的任何内部双引号都会被保留。
答案4
有多种方法可以获得您想要的输出,其中一种可以是cut -c
.只需定义要提取的字符范围并将输出通过管道传输到tail --lines=+2
命令即可删除标题(第一行)。例如:
cut -c2-9,11-14 <your_file_name> | tail --lines=+2
该-c2-9,11-14
选项定义字符位置范围从 2 到 9(ID 列的字符位置)和从 11 到 14(除 ' " ' 之外的其余字符的字符位置)。
该tail --lines=+2
命令打印文件中的所有行,但从第二行开始。
有关cut
命令的更多信息,您可以访问此地点。