小编Chr*_*our的帖子

bash:逐行读取文件,然后sed追加

我有一个文本文件,可以有X个字段,每个字段用逗号分隔.在我的脚本中,我逐行阅读,检查在该行上填充了多少字段,并确定我需要在该行的末尾追加多少逗号来表示所有字段.例如,文件如下所示:

Address,nbItems,item1,item2,item3,item4,item5,item6,item7    
2325988023,7,1,2,3,4,5,6,7
2327036284,5,1,2,3,4,5
2326168436,4,1,2,3,4
Run Code Online (Sandbox Code Playgroud)

应该成为这样的:

Address,nbItems,item1,item2,item3,item4,item5,item6,item7
2325988023,7,1,2,3,4,5,6,7
2327036284,5,1,2,3,4,5,,
2326168436,4,1,2,3,4,,,
Run Code Online (Sandbox Code Playgroud)

我的下面的脚本有效,但看起来非常低效.它是逐行阅读在大文件上有困难吗?导致经济放缓的是它吗?更好的方法吗?

#!/bin/bash

lineNum=0
numFields=`head -1 File.txt | egrep -o "," | wc -l`

cat File.txt | while read LINE
do
        lineNum=`expr 1 + $lineNum`
        num=`echo $LINE | egrep -o "," | wc -l`
        needed=$(( numFields - num ))
        for (( i=0 ; i < $needed ; i++ ))
        do
                sed -i "${lineNum}s/$/,/" File.txt
        done
done
Run Code Online (Sandbox Code Playgroud)

bash sed while-loop

3
推荐指数
1
解决办法
4260
查看次数

如何使用bash编写命令行工具

我想编写一个命令行工具,如git,它将遵循POSIX标准。这将需要的选项,如--help-h--version...等。但是我不知道该怎么做。谁能告诉我如何使用bash脚本执行此操作。请帮我。这对我来说是很新的东西。

例子:如果我的工具名称是Check-code,那么我想使用;

Check-code --help 
Run Code Online (Sandbox Code Playgroud)

要么

Check-code --version
Run Code Online (Sandbox Code Playgroud)

bash

3
推荐指数
2
解决办法
3527
查看次数

如何移动和编号文件?

我使用linux,bash.

我有一个目录,里面有100个文件夹,每个目录名称不同.

在这100个文件夹中的每个文件夹中都有一个名为first.bars的文件(所以我有100个名为first.bars的文件).虽然所有名为first.bars,但文件实际上略有不同.

我想将所有这些文件移动到一个新文件夹并重命名/编号这些文件,以便我知道哪个文件来自哪个文件夹.所以第一个first.bars文件必须重命名为001.bars,第二个文件必须重命名为002.bars ..等等.

我尝试过以下方法:

ls -d * >> /home/directorywiththe100folders/list.txt
cat list.txt | while read line;
do cd $line;
mv first.bars /home/newfolder
Run Code Online (Sandbox Code Playgroud)

这不起作用,因为我不能在一个文件夹中有100个名称相同的文件.所以我只需要知道如何重命名它们.重命名必须连接到cat list.txt,因为第一行是包含移动和重命名的第一个文件的文件夹.该文件将被称为001.bars.

linux bash move while-loop cat

3
推荐指数
1
解决办法
116
查看次数

从unix中的倒数第二行删除一个字符

我们如何从unix文件的倒数第二行中删除字符?

例如,我有一个内容如下的文件:

aaa
bbb*
ccc*
ddd*
eee
Run Code Online (Sandbox Code Playgroud)

我的输出应该是:

aaa
bbb*
ccc*
ddd
eee
Run Code Online (Sandbox Code Playgroud)

有什么想法吗?

unix linux bash awk sed

3
推荐指数
1
解决办法
1706
查看次数

如何使用AWK或Sed在x个单词之后插入换行符\n

我在一行中有这个:

We were born in the earth beyond the land
Run Code Online (Sandbox Code Playgroud)

我希望它在3个单词行中,如下所示:

We were born
in the earth 
beyond the land
Run Code Online (Sandbox Code Playgroud)

unix linux bash shell awk

3
推荐指数
1
解决办法
5906
查看次数

使用awk/sed从一行中提取数字

我有这个字符串:

Stream #0:0: Video: vp6f, yuv420p, 852x478, 1638 kb/s, 25 tbr, 1k tbn, 1k tbc
Run Code Online (Sandbox Code Playgroud)

我想从中提取25出来.我用:

sed -r 's/.+([0-9]{2} tbr).+/\1/'
Run Code Online (Sandbox Code Playgroud)

它返回我需要的东西.

无论如何,如果相反我会遇到一个字符串

Stream #0:0(eng): Video: mpeg4 (Simple Profile) (mp4v / 0x7634706D), yuv420p, 1920x1080 [SAR 1:1 DAR 16:9], 11981 kb/s, 29.97 fps, 29.97 tbr, 30k tbn, 30k tbc
Run Code Online (Sandbox Code Playgroud)

它不会再回归我需要的了.

我尝试了不同的替代方法,因此tbr在两种情况下都返回值,但找不到正确的表达式.

regex linux awk sed

3
推荐指数
1
解决办法
9970
查看次数

合并第一列的结果然后将第二列汇总到第一列中每个条目的总计

我有点Bash新手,所以请在这里忍受我.

我有一个由另一个软件(我无法控制)转储的文本文件,列出每个用户访问某些资源的次数,如下所示:

Jim 109
Bob 94
John 92
Sean 91
Mark 85
Richard 84
Jim  79
Bob  70
John 67
Sean 62
Mark 59
Richard 58
Jim  57
Bob  55
John 49
Sean 48
Mark 46
.
.
.

我的目标是获得这样的输出.

Jim  [Total for Jim]
Bob  [Total for Bob]
John [Total for John]

等等.

每次在软件中运行查询时名称都会更改,因此对每个名称进行静态搜索,然后通过wc进行管道传输无效.

linux bash shell awk

3
推荐指数
1
解决办法
885
查看次数

每当遇到逗号时在文件中插入换行符 - Shell脚本

我需要编写一个shell脚本来通过插入换行符来重新格式化文件.条件是当我们在文件中遇到逗号时应插入换行符.

例如,如果文件delimiter.txt包含:

这是一个文件,当我们找到逗号时,应该添加一个换行符.

输出应该是:

this
is a file
that should
be added
with a
line break
when we find a
a comma.
Run Code Online (Sandbox Code Playgroud)

可以这样做grep还是awk

unix shell awk

3
推荐指数
2
解决办法
1万
查看次数

在 Linux 中,有没有办法在分隔符上对齐文本?

我有一个基本上运行的脚本tmux ls

session1: 3 windows (created Fri Sep 20 13:16:13 2013) [157x56]
stuff: 3 windows (created Fri Sep 20 13:25:21 2013) [157x56]
asdf: 2 windows (created Sun Sep 29 23:06:33 2013) [77x17] (attached)
website: 1 windows (created Tue Sep 24 17:22:14 2013) [157x26]
Run Code Online (Sandbox Code Playgroud)

我希望该脚本的输出在冒号处对齐,以提高可读性。我知道如何使用,column -t但它并不能完全满足我的要求(请注意双倍间距,并且冒号实际上并未对齐):

session1:  3  windows  (created  Fri  Sep  20  13:16:13  2013)  [157x56]
stuff:     3  windows  (created  Fri  Sep  20  13:25:21  2013)  [157x56]
asdf:      2  windows  (created  Sun  Sep  29  23:06:33  2013)  [77x17]   (attached) …
Run Code Online (Sandbox Code Playgroud)

linux shell sed text-alignment

3
推荐指数
1
解决办法
2170
查看次数

去除字符串中的空格

我有以下代码:

  program main
     character (len=15) :: abc = "te st tex  t"
     print *, trim(abc)      
  end program main
Run Code Online (Sandbox Code Playgroud)

哪些输出:

 te st tex  t
Run Code Online (Sandbox Code Playgroud)

我排除了所有要删除的空格,但事实并非如此。如何从字符串中删除所有空格?

fortran trim gfortran fortran90

3
推荐指数
1
解决办法
2万
查看次数

标签 统计

bash ×6

linux ×6

awk ×5

sed ×4

shell ×4

unix ×3

while-loop ×2

cat ×1

fortran ×1

fortran90 ×1

gfortran ×1

move ×1

regex ×1

text-alignment ×1

trim ×1