Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/shell/5.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_Awk - Fatal编程技术网

Shell 将选定数据移动到两个选项卡

Shell 将选定数据移动到两个选项卡,shell,awk,Shell,Awk,我有一个只有一列的文件,它看起来像这样 chr1 C1orf122 YRDC chr1 chr1 chr1 chr1 NADK chr1 chr1 如果不是以chr开头,我想移动第一列中的data 2选项卡 预期产量 chr1 C1orf122 YRDC chr1 chr1 chr1 chr1 NADK chr1

我有一个只有一列的文件,它看起来像这样

chr1
C1orf122
YRDC
chr1
chr1
chr1
chr1
NADK
chr1
chr1
如果不是以chr开头,我想移动第一列中的data 2选项卡

预期产量

    chr1
                      C1orf122
                      YRDC
    chr1
    chr1
    chr1
    chr1
                      NADK
    chr1
    chr1
我正在这样做

awk '{if($1 ~ /chr*/) print $_ ; else print "\t\t" $1}' <result >temp
awk'{if($1~/chr*/)print$\else print“\t\t”$1}”temp
数据不会移动两个选项卡:(

请帮忙


谢谢您

单向使用
GNU sed

sed '/^chr/!s/.*/\t\t&/' file.txt
结果:

chr1
        C1orf122
        YRDC
chr1
chr1
chr1
chr1
        NADK
chr1
chr1

(那里实际上有两个选项卡)。如果您添加
-i
标志,您可以在此处进行更改,而无需使用临时文件。

我对您的程序有一些注释,顺便说一句(GNU awk):

  • $1~/chr*/
    尝试在第一个字段中查找
    ch
    chr
    chr
    等。如果您的意思是
    chr
    后跟任何内容,请使用
    chr.
    ,如果它应该锚定在字段的开头,请使用
    /^chr./
  • $是一个perl变量,我认为awk假设您的意思是
    $0
    ,即整行(记录)
通常,如果您的代码块以
if
开头,您可以将其放入该块的条件中,例如,以以下开头:

$1 ~ /^chr.*/ { ... }
在您的情况下,您想在行前面加上
\t\t
,如果它不是以
chr
开头,我会这样表示:

$1 !~ /^chr.*/ { printf("\t\t") } 1
末尾的
1
打印
$0

输出:

chr1
        C1orf122
        YRDC
chr1
chr1
chr1
chr1
        NADK
chr1
chr1
另一个解决方案:

awk '{$2=$1; sub($(!/chr1/),"",$1); sub($(/chr1/),"",$2); print $1 "\t\t" $2 }' file
结果:

awk '{$2=$1; sub($(!/chr1/),"",$1); sub($(/chr1/),"",$2); print $1 "\t\t" $2 }' file
chr1        
        C1orf122
        YRDC
chr1        
chr1        
chr1        
chr1        
        NADK
chr1        
chr1    

你能给我们一个预期输出的例子吗?我已经做了编辑,请检查它是否对我有效(我正在获得预期输出)这是否意味着我的文件中有一些隐藏字符无法正常工作?如果是,那么我如何才能看到它们以及如何消除它们?我的输入文件有问题。我无法找出原因…我假设它有一些隐藏字符或something@Angelo:sed-nl0 file.txt的结果是什么?这将显示e隐藏字符。否则,请尝试
dos2unix
。这是结果chr22\t41869347\t41869847\tMCAT$\t\t\tMCAT$原始文件有4列。因此,您可以在此处看到4列well@Angelo:因此,您的代码和我的代码至少在我的机器上都能工作。您使用的是什么shell?您的tabwidth设置为什么?请尝试键入
tabs-8
若要将tabwidth重置为默认大小,请尝试使用空格而不是制表符重新创建问题。结果如何?