我有一个csv文件,数据如下所示
'&(||o||022344527||o||lonyfoe||o||Joe||o||Joe||o||Otieno
我正在尝试删除第二列。
输出:
'&(||o||lonyfoe||o||Joe||o||Joe||o||Otieno
有什么想法吗?
这是我到目前为止所尝试的
cut -d'||o||' -f2 --complement
awk -F'||o||' '{
for(n=1; n<=NF; n++){
if(n!=NF)fmt="%s|"; else fmt="%s\n"
if(n!=2)printf(fmt,$n)
}
}'
但它不起作用
答案 0 :(得分:2)
如果您的Input_file与显示的示例相同,那么以下内容可能对您有所帮助:
awk '{sub(/\|\|o\|\|[0-9]+\|\|o\|\|/,"||o||")} 1' Input_file
输出如下:
'&(||o||lonyfoe||o||Joe||o||Joe||o||Otieno
答案 1 :(得分:1)
cut
分隔符只能是单个字符。在您的情况下,您可以使用|
,以便将||o||
分隔的每个值视为4个字段(空,o
,空,值)。第二列现在是5-8范围:
cut -d'|' -f5-8 --complement
答案 2 :(得分:1)
你可以试试以下......
sed -e 's/||o||/|/g' your-input-file | cut -d'|' -f1,3- | sed -e 's/|/||o||/g'
答案 3 :(得分:0)
使用非数字第二个字段添加了示例行
$ cat ip.txt
'&(||o||022344527||o||lonyfoe||o||Joe||o||Joe||o||Otieno
ijk||o||foobar||o||123||o||xyz
使用perl
$ perl -lne '$,="||o||"; @f=split /\Q$,/; print @f[0,2..$#f]' ip.txt
'&(||o||lonyfoe||o||Joe||o||Joe||o||Otieno
ijk||o||123||o||xyz
$,="||o||"
设置print
&#39; s @f=split /\Q$,/
使用$,
指定的分隔符获取数组,其中\Q
对于转义正则表达式元字符非常有用。默认情况下,split
将对$_
执行操作 - 在这种情况下为输入记录print @f[0,2..$#f]
打印必填字段,值$,
确定数组元素之间使用的字符串答案 4 :(得分:0)
你可以试试这个sed
// create the moment with a specific time zone
var m = moment.tz('2018-02-14T11:11', "America/Chicago");
// convert to UTC
m.utc();
// format the output
var s = m.format();
答案 5 :(得分:0)
这可能适合你(GNU sed):
sed 's/||o||/\n/g;s/[^\n]*\n//2;s/\n/||o||/g' file
按换行符替换所有分隔符。删除第二个字段及其分隔符。用分隔符替换换行符。
替代方案:
sed 's/||o||/\n/2;s/\(.*||o||\).*\n/\1/' file