小编jks*_*hah的帖子

恢复使用find后跟sed创建的多个备份文件

我需要在名称中编辑具有特定模式的文件.这些文件分布在多个分层目录中.

我正在使用find其后sed的帮助xargs实现如下相同:

find . -type f -name "file*" | sed -i.bak 's/word1/replace_word1/g'
Run Code Online (Sandbox Code Playgroud)

我的问题是,现在我想从备份文件(*.bak)恢复更改.示例目录树将如下所示.我正在寻找linux命令(可能是一个链)来实现相同的.

$ tree
.
|-- pdir1
|   |-- dir1
|   |   |-- dir2
|   |   |   |-- file2
|   |   |   `-- file2.bak
|   |   |-- file1
|   |   `-- file1.bak
|   `-- dir3
|       |-- file3
|       `-- file3.bak
`-- pdir2
    |-- file1
    `-- file1.bak
Run Code Online (Sandbox Code Playgroud)

我可以使用以下find命令找到所有备份文件.但无法弄清楚下一步该做什么.如果你可以帮我解决这个问题,那将会很明显.

find . -type f -name "file*.bak"
Run Code Online (Sandbox Code Playgroud)

注意

我将此问题视为一般情况.我曾多次遇到这种情况,但却为此编写了一个小包装脚本.在这里,我希望有一个通用而简洁的解决方案.

grep sed find xargs

4
推荐指数
1
解决办法
915
查看次数

基于特定列的排序,阈值和显示表数据

我有一个表格式的大数据文件需要分析.主要有两列是我感兴趣的,其中一列包含字母数字字母(列#1),另一列包含百分比数字(列#3).

我的要求是根据第3列的值反向排序数据,应用一些阈值(> 10.0)并且只按排序顺序显示符合此条件的所需行,列#1和列#3.

通常我会编写一个小脚perl本来实现这样的要求.但在这里,我正在寻找一系列linux命令(一个班轮)来快速有效地解决它.

样本输入

abc12   24.5     90.0    5  
xyz23   454.23   23.5    2
aa34cd  1.345    12.34   6
uvxy    4.25     54.7    1
pqr3t   235.3    6.05    4
abcd    1.234    4.56    3
Run Code Online (Sandbox Code Playgroud)

期望的输出

abc12   90.0
uvxy    54.7
xyz23   23.5
aa34cd  12.34
Run Code Online (Sandbox Code Playgroud)

如果你能帮助我解决这个问题,那将是很明智的.

我试过了什么?

我可以使用以下命令对#3列进行反向排序.不知道下一步是什么!

awk '{print $3}' test.txt | sort -rn
Run Code Online (Sandbox Code Playgroud)

sorting awk grep sed

4
推荐指数
1
解决办法
139
查看次数

如何使用awk打印路径文件名的尾部

我搜索它没有成功.

我有一个带有pathes的文件.我想要打印所有路径的尾部.例如(对于文件中的每一行):

/homes/work/abc.txt
--> abc.txt
Run Code Online (Sandbox Code Playgroud)

有谁知道怎么做?

谢谢

linux awk

4
推荐指数
2
解决办法
3805
查看次数

从perl脚本中提取用户名

我想在脚本本身中提取用户名,执行perl脚本.

我正在whoami从perl 执行linux命令,如下所示,它运行得很好.

my $whoami = `whoami`;
chomp $whoami;
print $whoami;
Run Code Online (Sandbox Code Playgroud)

我的目的是摆脱从perl脚本调用系统命令.因此我在寻找Perl唯一的解决方案.我想知道是否有可用的CPAN模块可以提取系统信息.

您对此问题的建议表示赞赏.

perl

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

在perl中读取大型日志文件的方法及其比较

我有一个巨大的日志文件(约5-10万行).我需要遍历每一行并进行处理.我看到了巨大的运行时间.

我知道有两种读取文件的方法,perl如下所示.

(1)如何比较不同方法的性能?任何基准标记机制?

(2)什么是最有效的方式和原因?有没有第三种更好的方法?

一种选择是实现这两种方法并检查运行时.但在这里,我试着了解是什么让他们跑得更快或更慢.如果你能在这方面帮助我,那将是件好事.

方法1

open FOPEN, '<', $file or die $!;
my @lines = <FOPEN>;
chomp @lines;
foreach (@lines) {
    # do something on $_
}
Run Code Online (Sandbox Code Playgroud)

方法2

open FOPEN, '<', $file or die $!;
while (<FOPEN>) {
    chomp;
    # do something on $_
}
Run Code Online (Sandbox Code Playgroud)

perl file-io

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

awk命令查找多次出现的文本模式的名称

我有一个文本文件,其中包含所有文件的列表,文件名如下

Test.java_v1 
Test.java_v1_v1 
Real.cbs_v2_v2
Run Code Online (Sandbox Code Playgroud)

如何使用awk找到其扩展名中包含多一个"_"的文件的名称?

我想要考虑_之后的.事情.

Test_1.java_v1
Test.java_V1_V1
Real.cbs_v2_v2
Run Code Online (Sandbox Code Playgroud)

输出不应该包含Test_1.java_v1,我该怎么做?

shell awk

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

SED:如何将字符串插入最后一行的开头

如何将字符串插入最后一行的开头?

我想在包含多行的文本文件中添加时间戳

var1 = `date`

LINE1
LINE2
LINE3
...
(INSERT var1 here) LASTLINE
Run Code Online (Sandbox Code Playgroud)

sed 's/^/test line /g' textfile 将字符插入每行的开头但是如何才能专门修改最后一行?

谢谢

前进: sed '$s/^/sample text /' textfile工作,但仅在插入常规字符串时.如果我试试

var1 = "sample text"
Run Code Online (Sandbox Code Playgroud)

并使用替代,这是我遇到的问题

  1. 在sed中使用单引号不会扩展变量,因此sed'$ s/^/$ var1 /'textfile会将字符串$ var1插入到最后一行的开头.

  2. 为了启用变量替换,我尝试使用双引号.当我指定确切的行号时,它可以工作.就像是:

    sed"5s/^/$ var1 /"textfile

但是当我尝试时sed "$s/^/$var1" text file,它会返回一个错误:

sed:-e expression#1,char 5:命令后的额外字符

有谁可以帮助我吗?

linux bash sed insert

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

标签 统计

awk ×3

sed ×3

grep ×2

linux ×2

perl ×2

bash ×1

file-io ×1

find ×1

insert ×1

shell ×1

sorting ×1

xargs ×1