我有一个类似
的文件N #>= 6
我想将此文件拆分为两个单独的文件,称为源和目标,这样源文件只包含' - >之前的元素。 '和目标文件,后面的部分。
我尝试使用如下剪切
60 -> 36
48 -> 11
60 -> 59
35 -> 29
27 -> 76
但是cut给了我这个错误
cut -d' -> ' -f1 input > source
cut -d' -> ' -f2 input > destination
答案 0 :(得分:3)
awk '{print $1 > "source"; print $3 > "destination"}' input
答案 1 :(得分:1)
尝试使用空格作为分隔符:" "
。在第二种情况下使用-f3
。
或者使用GNU sed:
sed -ne 'h;s/ .*//w source' -e 'g;s/.* //w destination' input
答案 2 :(得分:1)
awk
是您进行正则表达式分割的最佳选择。
假设:
$ echo "$tgt"
60 -> 36
48 -> 11
60 -> 59
35 -> 29
27 -> 76
您可以在正则表达式上使用awk
拆分输入:
$ echo "$tgt" | awk -F " -> " '{print $1}'
60
48
60
35
27
$ echo "$tgt" | awk -F " -> " '{print $2}'
36
11
59
29
76
根据需要重定向到两个文件。
答案 3 :(得分:0)
这样的事情可能是(gnu sed)
sed 's/^\([^ ]*\)/\1/' <file >source
sed 's/.* \(.*\)/\1/' <file >destination
答案 4 :(得分:0)
据我了解,cut
无法使用多个字符作为分隔符。
使用sed
,它应该像这样工作:
sed -E 's/^(.*) -> .*$/\1/g' input > source
sed -E 's/^.* -> (.*)$/\1/g' input > destination
答案 5 :(得分:0)
sed '1!H;1h;$!d
g;s/ ->[ 0-9]*//g;w Source
g;s/[ 0-9]* ->//g;w Destination
' YourFile
通过删除所有行结束来写入源,而不是在将文件加载到内存中并将其用于每个子目录后移除行头的目标