Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/unix/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Shell 将空格转换为制表符分隔文件第一行的制表符_Shell_Unix_Awk_Sed - Fatal编程技术网

Shell 将空格转换为制表符分隔文件第一行的制表符

Shell 将空格转换为制表符分隔文件第一行的制表符,shell,unix,awk,sed,Shell,Unix,Awk,Sed,我有多个具有相同列标题的制表符分隔文件。但是,标题(文件的第一行)由空格而不是制表符分隔。如何将以制表符分隔的文件的第一行上的空白转换为制表符 您只能对一行使用sed: sed -i.bak $'1s/ /\t/g' file.csv 听起来您可以使用awk: awk -v OFS='\t' 'NR == 1 { $1 = $1 } 1' file 将第一行的第一个字段$1分配给自身会导致awk重新格式化该行,插入输出字段分隔符OFS(定义为制表符)1是最短的真条件,因此awk对每一行执行默

我有多个具有相同列标题的制表符分隔文件。但是,标题(文件的第一行)由空格而不是制表符分隔。如何将以制表符分隔的文件的第一行上的空白转换为制表符

您只能对一行使用
sed

sed -i.bak $'1s/ /\t/g' file.csv

听起来您可以使用awk:

awk -v OFS='\t' 'NR == 1 { $1 = $1 } 1' file
将第一行的第一个字段
$1
分配给自身会导致awk重新格式化该行,插入输出字段分隔符
OFS
(定义为制表符)
1
是最短的真条件,因此awk对每一行执行默认值:
{print}

要覆盖“就地”,请使用临时文件:

awk -v OFS='\t' 'NR == 1 { $1 = $1 } 1' file > tmp && mv tmp file

请注意,这会将任意数量的空格解释为单个字段分隔符。

您熟悉
unexpand
(及其配套的
expand
)吗?