我有一个文本文件,可以有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) 我想编写一个命令行工具,如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) 我使用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.
我们如何从unix文件的倒数第二行中删除字符?
例如,我有一个内容如下的文件:
aaa
bbb*
ccc*
ddd*
eee
Run Code Online (Sandbox Code Playgroud)
我的输出应该是:
aaa
bbb*
ccc*
ddd
eee
Run Code Online (Sandbox Code Playgroud)
有什么想法吗?
我在一行中有这个:
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) 我有这个字符串:
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在两种情况下都返回值,但找不到正确的表达式.
我有点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进行管道传输无效.
我需要编写一个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?
我有一个基本上运行的脚本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) 我有以下代码:
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)
我排除了所有要删除的空格,但事实并非如此。如何从字符串中删除所有空格?