Unix命令切割文件并重新创建新文件

时间:2014-02-13 11:46:41

标签: unix awk cut

我有一个input.txt,其中包含这样的数据

123

1234

1223

我希望它转换为另一个文件output.txt,文件应该如下所示

'123','1234','1223'

有人可以告诉我如何在unix中完成它吗?

6 个答案:

答案 0 :(得分:2)

你可以试试这个,

tr -s '\n' < input.txt | sed "s/.*/'&'/g" | tr '\n' ',' | sed 's/,$//g' > output.txt

答案 1 :(得分:0)

您可以使用sed

cat input.txt | sed -n "s!\(.*\)!'\1'!;H;\$!b;x;s!^\n!!;s!\n!,!g;p"

读取每一行(默认情况下不打印-p),然后将其附加到保留空间H - 然后停止除最后一行\$b以外的所有行。 在最后一行 - 将保留空间复制到模式空间x中,抛弃第一个换行符(保留空间中有一个换行符开头),然后用','替换剩余的换行符。最后打印出模式空间p

您可以使用perl脚本

#!/usr/bin/perl

my @lines = <>;
chomp(@lines);
print join(',', map { "\"$_\"" } @lines), "\n";

./script input.txt

答案 2 :(得分:0)

我害怕我不能用bash。在Python中试试这个:

InputFilepath = /path/to/input.txt
OutputFilepath = /path/to/output.txt

with open(InputFilepath, "r") as f:
    words = f.read().splitlines() #may be not needed?
    result = ','.join(f)

with open(OutputFilepath, "w") as g:
    g.write(result)

答案 3 :(得分:0)

我敢打赌,有一种更清洁的方法可以做到这一点,但到目前为止还无法想到它。

#         1            2                          3             4
sed "/^[ \t]*$/d; s/\(.*\)/'\1'/" input.txt | tr "\n" "," | sed 's/,$//'
  1. 删除空白行(包括包含空格/制表符的行)。
  2. 在每行附近添加单引号
  3. 用逗号替换换行符
  4. 删除尾随,

答案 4 :(得分:0)

这是awk版本

awk 'NF{s=s q$0q","} END {sub(/,$/,x,s);print s}' q="'" file
'123','1234','1223'

工作原理:

awk '
NF {                # When line is not blank, do:
    s=s q$0q","}    # Chain together all data with ' before and ',
END {               # End block
    sub(/,$/,x,s)   # Remove last ,
    print s}        # Print the result
    ' q="'" file    # Helps awk to handle single quote in print, and read the file  

答案 5 :(得分:0)

使用GNU awk进行多字符RS:

$ awk -v RS='\n+$' -v FS='\n+' -v OFS="','" -v q="'" '{$1=$1; print q $0 q }' file
'123','1234','1223'

它只是将整个文件读作一条记录(RS='\n+$'),使用连续换行符序列作为输入字段分隔符(FS='\n+'),然后使用','作为输出字段重新编译记录分隔符(OFS="','")通过为自身分配一个字段($1=$1),并在前面和后面打印一个'的结果。